package com.decorator.demo2;

/**装饰者模式是指在不改变现有对象结构的情况下，动态的对其增加一些职责的模式。

     装饰者模式有以下几个成员：

抽象构件：定义一个抽象接口准备接受附加责任的对象。

具体构件：实现抽象构件，通过装饰角色增加一些职责。

抽象装饰：继承抽象构件，包含具体构件的实例。

具体装饰：实现抽象装饰的一些方法。

装饰者模式与代理模式都是在不改变原有类结构的基础上新增一些职责，两者功能一致，从类图上看，结构也很相似。

      装饰者模式关注于在一个对象上动态的添加方法，然而代理模式关注于控制对对象的访问。换句话 说，用代理模式，代理类可以对它的客户隐藏一个对象的具体信息。因此，当使用代理模式的时候，我们常常在一个代理类中创建一个对象的实例。并且，当我们使用装饰器模 式的时候，我们通常的做法是将原始对象作为一个参数传给装饰者的构造器。

      可以用另外一句话来总结这些差别：使用代理模式，代理和真实对象之间的的关系通常在编译时就已经确定了，而装饰者能够在运行时递归地被构造。

     举例说明：汽车的生产—汽车对象Car，在出厂的时候可以添加修饰，使之成为不同类型的车辆。
 * @author zhangsulei
 *
 */
public class Test {

	public static void main(String[] args) {
		Car truck = new Truck(new MyCar());
		truck.create();
		//it's a car.it's a truck.
		Car bus = new Bus(new MyCar());
		bus.create();
		//it's a car.it's a truck.
	}

}
